2019.2.12 星期二
php 文档:https://www.php.net/manual/zh/dbase.installation.php
https://www.php.net/manual/en/dbase.installation.php
php 扩展安装地址: http://pecl.php.net/
pecl: 可以按照 wget,npm,composer 理解
linux: 1.yum或者apt-get安装 2.使用pecl安装 3.(wget) phpize安装——以redis为例 4.直接安装(类似windows)
- nginx 配置和 cgi, fast cgi. 和php-fpm
php 5 的项目,改动文件需要执行service php-fpm restart
.
而php 7 不需要。 - `<?php phpinfo(); ?> 函数会直接输出/查看php 的相关配置信息。
- 查看php安装的扩展:phpinfo(),php -m,get_loaded_extensions()函数
- php 输出错误信息,可以修改配置。也可以在php文件中,写函数。
1) display_errors:On,log_errors:On ,error_log: 将出错信息输出到一个文本文件
2) ini_set(‘display_errors’,1); ini_set(‘error_log’, dirname(FILE) . ‘/error_log.txt’)
ini_set(‘display_errors’, true);
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE); - php 语法报错:PHP号称变量可以直接调用,原来是假的。
Notice: Undefined offset
:初始化数组变量:$a[] = 0
1) 更改php.ini文件中error_repoting的参数为”EALL & Notice “,
2) 简单的可以在当前文件的最前面加上一句”error_reporting(填offset:接下去的那个数字);
3) 其实在报错的那一行前面加一个@符号,屏蔽错误就ok了。非常简单。 - 文件可以设置报错级别:error_reporting(0);
- php 5 不支持数组新写法 等php7 的语法:
$arr=[1,2,3];
有的项目中,会导致页面空白,也不报错。
- php 可以引入不同的配置文件 conf.inc,db.conf.inc; conf.test.inc 等
可以在fastcgi_params配置php服务器nginx环境变量。或者直接写在nginx.conf, fastcgi.conf配置中。
两种方式调用:$env = getenv('RUNTIME_ENVIROMENT');$env = $_SERVER['RUNTIME_ENVIROMENT'];
1
2
3fastcgi_param RUNTIME_ENVIROMENT 'DEV';
fastcgi_param MYSQL_USERNAME 'root';
fastcgi_param MYSQL_PASSWORD 'root';
在Mix_pc Coupon中使用方式如下如下
1
2
3
4
5
6
7
8
9
10
11
12
13
// # 0 ConfigEvn.inc
//该常量决定使用哪个环境的的配置 可以的值 Online,Test,prod
if(isset($_SERVER['MIXENV'])&&!empty($_SERVER['MIXENV'])){
defined("DIR_ENV") or define("DIR_ENV", $_SERVER['MIXENV']);
}else{
defined("DIR_ENV") or define("DIR_ENV", 'Online');
}
// # 1 CouponConf.inc.
// 引入不同的配置文件
if(!defined('DIR_ENV')) {
include 'ConfigEvn.inc';
}
include DIR_ENV.'/CouponConf.inc';
- php 对象属性
$obj->attr
. 数组值$arr['index']
- php 比较大小(接口code): ‘111ssd’ == 111, ‘sss’==0.
取字符串前面的数字,如果没有就是0. php默认赋值需要通过三元操作符,不能通过短路运算符(js)
php:$b=$a?$a:''
js:var b=a||''
foreach遍历数组的顺序是按照值存入数组的先后顺序进行遍历的,此为线性遍历,不受数组键值的大小顺序影响。
在PHP中, 数组是用一种HASH结构(HashTable)来实现的, PHP使用了一些机制, 使得可以在O(1)的时间复杂度下实现数组的增删, 并同时支持线性遍历和随机访问
也就是说, PHP中遍历数组的顺序, 是和元素的添加先后相关的, 那么, 现在我们就很清楚的知道, 文章开头的问题的输出是:所以, 如果你想在数字索引的数组中按照索引大小遍历, 那么你就应该使用for, 而不是foreach
1
2
3for($i=0,$l=count($arr); $i<$l; $i++) {
//这个时候,不能认为是顺序遍历(线性遍历)
}
- php 通过
file_get_contents('php://input')
获取前端提交的json数据。在用fetch的时候,传了json$_POST
接收不到,jquery的ajax可以,做compd收藏的时候使用的fetch,是把数据手动改成form-data/www.form-encodedurl
PHP接收JSON格式的数据
在API服务中,目前流行采用json形式来交互。
给前端调用的接口输出Json数据,这个比较简单,只需要组织好数据,用json_encode($array) 转化一下,前端就得到json格式的数据。
接收前端提交的json数据稍微复杂一点,原因是:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。因此,对型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之类的内容无法解析,如果用$_POST数组来接收就会失败!
此时可以使用$GLOBALS[‘HTTP_RAW_POST_DATA’] 或 file_get_contents(‘php://input’) 来获取提交的数据
查看手册,可以发现$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST的区别:
$_POST:通过 HTTP POST 方法传递的变量组成的数组,是自动全局变量。
$GLOBALS[‘HTTP_RAW_POST_DATA’] :总是产生 $HTTP_RAW_POST_DATA 变量包含有原始的 POST 数据。此变量仅在碰到未识别 MIME 类型的数据时产生。$HTTP_RAW_POST_DATA 对于 enctype=”multipart/form-data” 表单数据不可用。也就是说基本上$GLOBALS[‘HTTP_RAW_POST_DATA’] 和 $_POST是一样的。但是如果post过来的数据不是PHP能够识别的,你可以用 $GLOBALS[‘HTTP_RAW_POST_DATA’]来接收,比如 text/xml 或者 soap 等等。
补充说明:PHP默认识别的数据类型是application/x-www.form-urlencoded标准的数据类型。